package cn.xyafu.lost.activity;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

import android.os.Bundle;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;

import cn.xyafu.lost.R;
import cn.xyafu.lost.fragment.BaseFragment;
import cn.xyafu.lost.fragment.HomeFragment;
import cn.xyafu.lost.fragment.MessageFragment;
import cn.xyafu.lost.fragment.MineFragment;
import cn.xyafu.lost.utils.ToastUtils;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    //底部布局
    private RelativeLayout rl_tab_home;
    private RelativeLayout rl_tab_message;
    private RelativeLayout rl_tab_mine;
    //底部图标
    private TextView tv_img_home;
    private TextView tv_img_message;
    private TextView tv_img_mine;

    // Fragment
    private HomeFragment homeFragment;
    private MessageFragment messageFragment;
    private MineFragment mineFragment;
    private FragmentManager fragmentManager;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 1. 初始化view
        initView();
        // 2. 初始化事件Listener
        initListener();
        // 3. 切换Fragment的逻辑一: 设置默认的Fragment: HomeFragment
        initFragment();


    }

    // 初始化Fragment  设置默认的Fragment: HomeFragment
    private void initFragment() {
        // 如何在Activity里显示一个Fragment, FragmentManager
        homeFragment = new HomeFragment();
        fragmentManager = getSupportFragmentManager(); // 获取Fragment管理器
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();// 获取Fragment的事物对象
        fragmentTransaction.replace(R.id.content_layout,homeFragment);// 替换
        fragmentTransaction.commit();//提交
    }

    // 初始化view
    private void initView(){
        //1. 底部布局
        rl_tab_home = findViewById(R.id.rl_tab_home);
        rl_tab_message = findViewById(R.id.rl_tab_message);
        rl_tab_mine = findViewById(R.id.rl_tab_mine);
        //2. 底部的图标
        tv_img_home = findViewById(R.id.tv_img_home);
        tv_img_message = findViewById(R.id.tv_img_message);
        tv_img_mine = findViewById(R.id.tv_img_mine);

    }
    // 初始化监听事件
    private void initListener() {
        // 需求: 点击底部布局,然后进行切换fragment
        rl_tab_home.setOnClickListener(this);
        rl_tab_message.setOnClickListener(this);
        rl_tab_mine.setOnClickListener(this);
    }
    /**
     * @author wangdh
     * @time 2021/12/7 0007
     * desc： 实现接口OnClickListener之后,重写的方法
     */
    @Override
    public void onClick(View v) {
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        // 判断点击的是哪个标签
        switch (v.getId()){
            case R.id.rl_tab_home:// 如果点击的是home,执行这个case
                // 1. 切换图标的颜色
                changeRes(tv_img_home,R.drawable.comui_tab_home_selected);
                // 2. 切换对应的Fragment
                // 2.1 如果此fragment从未添加过,那么就创建,并添加
                if(homeFragment == null){
                    homeFragment = new HomeFragment();
                    fragmentTransaction.add(R.id.content_layout,homeFragment);
                }else{
//                     2.2 如果添加过,那么直接显示
                    fragmentTransaction.show(homeFragment);
                }
                // 2.3 隐藏其他Fragment
                hideFragment(messageFragment,fragmentTransaction);
                hideFragment(mineFragment,fragmentTransaction);
                break;
            case R.id.rl_tab_message:
                // 1. 切换图标的颜色 (分析:更换为选中的图片)
                changeRes(tv_img_message,R.drawable.comui_tab_message_selected);
//                // 2. 切换对应的Fragment
//                // 2.1 如果此fragment从未添加过,那么就创建,并添加
                if(messageFragment == null){
                    messageFragment = new MessageFragment();
                    fragmentTransaction.add(R.id.content_layout,messageFragment);
                }else{
                    // 2.2 如果添加过,那么直接显示
                    fragmentTransaction.show(messageFragment);
                }
//                // 2.3 隐藏其他Fragment
                hideFragment(homeFragment,fragmentTransaction);
                hideFragment(mineFragment,fragmentTransaction);
                break;
            case R.id.rl_tab_mine:
                changeRes(tv_img_mine,R.drawable.comui_tab_mine_selected);

                // 2.1 如果此fragment从未添加过,那么就创建,并添加
                if(mineFragment == null){
                    mineFragment = new MineFragment();
                    fragmentTransaction.add(R.id.content_layout,mineFragment);
                }else{
                    // 2.2 如果添加过,那么直接显示
                    fragmentTransaction.show(mineFragment);
                }
                // 2.3 隐藏其他Fragment
                hideFragment(homeFragment,fragmentTransaction);
                hideFragment(messageFragment,fragmentTransaction);
                break;
        }
        fragmentTransaction.commit();
    }
    // 隐藏Fragment
    private void hideFragment(BaseFragment hideFragment, FragmentTransaction fragmentTransaction) {
        if(hideFragment!=null){
            fragmentTransaction.hide(hideFragment);
        }
    }

    /**
     * @author wangdh
     * @time 2021/12/7 0007
     * desc： 切换图片
     * 问题: 如何确定参数?
     *         确定代码中有几处不确定的代码即可?
     *          1. tv_img_home   留下谁
     *          2. R.drawable.comui_tab_home_selected   对应的黄色图片
     *
     */

    private void changeRes(TextView currentTv, int currentRes) {
        //排他思想: 干掉所有人,留下我自己
        // (1). 干掉所有人, 将其他的图标换成白色
        tv_img_message.setBackgroundResource(R.drawable.comui_tab_message);
        tv_img_mine.setBackgroundResource(R.drawable.comui_tab_mine);
        tv_img_home.setBackgroundResource(R.drawable.comui_tab_home);
        // (2). 将我自己改为黄色  (将点击的tv变为黄色)
        currentTv.setBackgroundResource(currentRes);
    }







}
